/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;

import domain.Entity.EntityProyecto;
import domain.Entity.EntityTarea;
import domain.Entity.EntityTareaTrabajada;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import domain.commands.TareaTrabajadaComando;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import managers.TrabajoManager;
import managers.UsuarioManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class modificarTiempoController extends SimpleFormController{
    
    UsuarioManager um = UsuarioManager.getInstance();
    TrabajoManager trm = TrabajoManager.getInstance();
    
    public modificarTiempoController() {
        setCommandClass(TareaTrabajadaComando.class);
  }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception {
          
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession();
        EntityUsuario eu = (EntityUsuario) session.getAttribute("usuario");
        if(eu == null){
            mav.setView(new RedirectView("login.htm"));
            return mav;
        }else{
        TareaTrabajadaComando ttc = (TareaTrabajadaComando) command;
        

        long dni = eu.getDni();
        EntityTrabajador etr = um.getTrabajador(dni);
        
        EntityTarea et = (EntityTarea) session.getAttribute("tarea");
        
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date fecha = sdf.parse(ttc.getFecha());
        
        Time tiempoInicial = trm.calculaTiempoInicial(ttc.getHoraIni());
        Time tiempoFinal = trm.calculaTiempoFinal(ttc.getHoraFin());
        
        Date actual = new Date();
        
        
        if(trm.estaTrabajando(fecha,tiempoFinal,tiempoInicial,etr) || trm.fechaLimite(fecha,et) || fecha.compareTo(actual)> 0){
            
            mav.setView(new RedirectView("error.htm"));
            
        }else{
        
        Time tiempoTrabajado = trm.calculaTiempoTrabajado(tiempoInicial,tiempoFinal);
        String tiempoTareaTrabajada = trm.calculaTiempoTareaTrabajada(tiempoTrabajado);
        
        EntityTareaTrabajada ett = new EntityTareaTrabajada();
        
        ett.setFecha(fecha);
        ett.setHora_ini(ttc.getHoraIni());
        ett.setHora_fin(ttc.getHoraFin());
        ett.setTiempo(tiempoTareaTrabajada);
        ett.setEt(et);
        ett.setEtr(etr);
        ett.setComentario(ttc.getComentario());
      
        EntityProyecto ep = et.getEpy();
        ep = trm.calculaTiempoProyecto(ep,tiempoTrabajado);
        if(ep.getHoras_maximas()< ep.getHoras()){  
            mav.setView(new RedirectView("error.htm"));
        }
        
        trm.trabajar(ett,etr,et,ep,tiempoTrabajado);
        
        Date hoy = new Date();
        List tareasTrabajadas = trm.tareasTrabajadas(etr, hoy);
        session.setAttribute("trabajosdehoy", tareasTrabajadas);
        
        mav.setView(new RedirectView("mostrarTareas.htm"));
        }
        
        return mav;
        }
    }

   
    
   

}
